當我們在讀取DB資料時可能會佔用大量 CPU 的資源讓請求需要花幾秒鐘完成,這種情況我們會使用緩存,速度會比從DB存取快。
而 Laravel 有提供我們使用緩存的方法,例如: memcached,redis,file 等等。
我們可以打開 config/cache.php 來看看設定。
可以看到一開始有一個 default 設定
'default' => env('CACHE_DRIVER', 'file'),
預設是用 file 的方式進行緩存,我們就用這種方式來寫寫看吧。
Cache::store('file')->put('bar', 'baz', 600);
Cache::put('bar', 'baz', 600);
這邊的範例是我們選擇利用 file 來做緩存,但因為預設就是 file 所以也可以拿掉,第一個參數 'bar' 是 key 第二個參數是 'value' 第三個參數是緩存時間(秒),若我們這時候用
$value = Cache::get('bar');
這時候會回傳 'baz',這個 get 方法可以傳入第二個參數當作預設值,若 $value 回傳 null,則我們會回傳預設值。
第二個參數甚至可以傳入一個 Closure
$value = Cache::get('bar', function () {
return DB::table(...)->get();
});
我們可以利用 pull 將緩存移除
$value = Cache::pull('bar');
OK~那我們用Cache實作功能,創建一個userName的command,接著開始寫程式
public function handle()
{
$id = $this->argument('id');
if(Cache::has($id)){
$cryptName = Cache::get($id);
}
else {
$cryptName = User::select('name')->where('id', $id)->first();
Cache::put($id, $cryptName);
}
if($cryptName !== null){
$this->line(Crypt::decryptString($cryptName));
}else{
$this->line("Null");
}
return 0;
}
這邊我們先判斷 Cache 裡面是否有 $id 這個 key,有就 get,沒有就 DB seletct 出來,接著把他 put 進 Cache 裡,然後 decrypt 後印出來
OK!今天就到這邊囉~